// const data1 = [
//   { 'id': '29', 'pid': '', 'name': '总裁办' },
//   { 'id': '2c', 'pid': '', 'name': '财务部' },
//   { 'id': '2d', 'pid': '2c', 'name': '财务核算部' },
//   { 'id': '2f', 'pid': '2c', 'name': '薪资管理部' },
//   { 'id': 'd2', 'pid': '', 'name': '技术部' },
//   { 'id': 'd3', 'pid': 'd2', 'name': 'Java研发部' },
//   { 'id': 'd3', 'pid': '2d', 'name': 'Java研发部2' }
// ]
// // 实现方法
// function updateData(data, { id, pid }) {
//   // 找出树形数据的最顶层的数据给新数组
//   const arr = data.filter(e => !e[pid])
//   // 根据顶层数据递归寻找子代数据
//   function dd(arr1, arr2) {
//     arr1.forEach((e, index) => {
//       const arrChildren = data.filter(item => e[id] === item[pid])
//       // 如果有子代就继续寻找   防止还有子代
//       if (arrChildren.length) {
//         dd(arrChildren, arr2)
//         // 将子代数据添加到新的数组中
//         arr1[index].children = arrChildren
//       }
//     })
//   }
//   // 第一次调用
//   dd(arr, data)
//   return arr
// }
// const a1 = updateData(data1, { id: 'id', pid: 'pid' })
// console.log(a1)

const data1 = [
  { 'id': '29', 'pid': '', 'name': '总裁办' },
  { 'id': '2c', 'pid': '', 'name': '财务部' },
  { 'id': '2d', 'pid': '2c', 'name': '财务核算部' },
  { 'id': '2f', 'pid': '2c', 'name': '薪资管理部' },
  { 'id': 'd2', 'pid': '', 'name': '技术部' },
  { 'id': 'd3', 'pid': 'd2', 'name': 'Java研发部' },
  { 'id': 'd3', 'pid': '2d', 'name': 'Java研发部2' }
]
// 实现方法
function updateData(data, { id, pid }) {
  // 递归
  function dd(arr1, pid1) {
    const arr = []
    arr1.forEach(e => {
      // 第一次运行先找出树形顶层数据   除第一次运行都需要找到子代数据
      if (e[pid] === pid1) {
        // 开始递归寻找子代数据
        const arrChildren = dd(arr1, e[id])
        // 如果子代数据存在
        if (arrChildren.length) {
          // 将子代数据添加到新的数组中
          e.children = arrChildren
        }
        // 子代数据找完后将完整数据进行添加到新数组中
        arr.push(e)
      }
    })
    return arr
  }
  // 第一次调用
  return dd(data, '')
}
const a1 = updateData(data1, {
  id: 'id',
  pid: 'pid'
})
console.log(a1)

